【文件上传绕过】

您所在的位置:网站首页 apache 正则 【文件上传绕过】

【文件上传绕过】

#【文件上传绕过】| 来源: 网络整理| 查看: 265

文章目录 一、实验目的:二、工具:三、实验环境:四、Apache 解析漏洞:1. 漏洞原理:2. 影响版本:3. 实验过程:3.1 模拟实验:3.2 upload-labs闯关游戏(Pass-04): 五、其余配置问题导致的漏洞:

一、实验目的:

1、通过本次实验掌握apache解析漏洞原理。 2、通过upload-labs-master闯关游戏Pass-04,掌握apache解析漏洞技术。

二、工具:

火狐/谷歌浏览器

三、实验环境:

靶 机: windows10虚拟机:192.168.15.133       upload-labs-master闯关游戏       phpstudy2013搭建网站       Apache服务器(wamp2.0) 攻击机: 物理机

四、Apache 解析漏洞: 1. 漏洞原理:

  Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.a.b的“.a”和“.b”这两种后缀是apache不可识别解析,apache就会把test.php.a.b解析成test.php。

2. 影响版本:

apache 1.x apache 2.2.x

查看apache版本: 打开服务器的Apache\bin目录,复制目录地址:

进入命令行,切换到D:盘,cd到上面复制的路径下,输入下面命令: 命令:

httpd -v //查看apache版本信息

3. 实验过程: 3.1 模拟实验:

1、在www目录下创建名为1.php.a.b的文件: 内容为:

2、然后在浏览器中打开此文件,成果展示:

3.2 upload-labs闯关游戏(Pass-04):

页面源码:

$is_upload = false; $msg = null; //判断文件上传操作 if (isset($_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { //检查服务器上传目录是否存在。如果指定的文件或目录存在则返回 true,否则返回 false。 $deny_ext = array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf"); //声明一个数组,里面存放着文件上传的后缀名黑名单。 $file_name = trim($_FILES['upload_file']['name']); //移除上传文件名两端空白字符或其他预定义字符 $file_name = deldot($file_name);//删除文件名末尾的点 $file_ext = strrchr($file_name, '.'); //截取文件后缀名,从点最后出现的位置开始截取。 $file_ext = strtolower($file_ext); //所有的字符转换为小写 $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA $file_ext = trim($file_ext); //首尾去空 if (!in_array($file_ext, $deny_ext)) { //和黑名单里面的进行对比,判断后缀名是否在黑名单里面,如果不在黑名单里面,就获得获取图片的临时存储路径 $temp_file = $_FILES['upload_file']['tmp_name']; //获取图片的临时存储路径 $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext; //重构文件路径和文件名 if (move_uploaded_file($temp_file, $img_path)) { //对文件进行转存 $is_upload = true; } else { $msg = '上传出错!'; } } else { $msg = '此文件不允许上传!'; } } else { $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!'; } }

代码处理流程:声明一个数组,里面存放着文件上传的后缀名黑名单-->获得上传文件的后缀名,并移除两端空白字符-->删除文件名末尾的点-->截取文件后缀名-->所有的字符转换为小写-->去除字符串::$DATA-->首尾去空-->进行判断,如果不在黑名单里面就获取图片的临时存储路径-->重构文件路径和文件名-->对文件进行转存 1、上传上面创建的1.php.a.b文件到服务器,并复制图片链接,进行访问:

2、通过访问,发现1.php.a.b文件可以被解析为php脚本文件:

五、其余配置问题导致的漏洞:

1、如果在 Apache 的conf里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是test2.php.jpg也会以php 来执行。

修改配置文件: 2、在红框中加入AddHandler php5-script .php : 3、重启phpstudy: 2、如果在 Apache 的 conf里有这样一行配置AddType application/x-httpd-php .jpg即使扩展名是jpg一样能以php方式执行。 在红框中加入AddType application/x-httpd-php .jpg: 在这里插入图片描述3、重启phpstudy:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3